package com.itcast.demoone.kotlin

fun main() {
    commonLambda()
}

fun commonLambda(){
    // 1. 将元素转换为另一种形式
    val names = listOf("ZhangSan", "LiSi", "WangWu")
    val lengths = names.map { it.length }
    println(lengths) // [8, 4, 6]


    // 2. 筛选符合条件的元素
    val numbers = listOf(1, 2, 3, 4, 5)
    val evens = numbers.filter { it % 2 == 0 }
    println(evens)  // [2, 4]


    // 3. forEach - 遍历元素
    // 替代传统 for 循环
    listOf("A", "B", "C").forEach {
        print("$it ") // A B C
    }

    println()

    // 带索引遍历
    listOf("Apple", "Banana").forEachIndexed { index, item ->
        println("$index: $item")
    }

    // 4. find/firstOrNull - 查找元素
    // 查找符合条件的第一个元素
    data class User(val name: String, val age: Int)
    val users = listOf(User("Alice", 25), User("Bob", 17))
    println(users.find { it.age < 18 })  // User("Bob", 17)

    // 安全查找（找不到返回 null）
    val user = users.firstOrNull { it.name == "ZhangSan" }
    println(user)


    // 5. 安全处理可空对象
//    val name: String? = ""
//    name?.let {
//        println(it.uppercase()) // 仅在非空时执行
//    }

    // 6. takeIf/takeUnless - 条件检查
    // 根据条件获取或排除对象
//    val input = "kotlin"
//    val result = input.takeIf { it.length > 3 }?.uppercase() // "KOTLIN"
//    println(result)

    // 实际应用：验证检查
//    val email = "user@example.com"
//    val validEmail = email.takeIf { it.contains("@") } ?: throw Error("错误的邮箱地址")
//    println(validEmail)
}